// 路由鉴权

import router from './router';
import nprogress from 'nprogress';
import 'nprogress/nprogress.css';
import { pinia } from './store';
import useUserStore from './store/modules/user';
nprogress.configure({ showSpinner: false });
// 获取用户相关 token
// 组件外使用仓库数据需要先将 pinia 引入
const userStore = useUserStore(pinia);
// 路由前置守卫
router.beforeEach(async (to, from, next) => {
    document.title = to.meta.title as string;
    nprogress.start();

    // 判断用户是否登录
    const token = userStore.token;
    const username = userStore.username;

    if (token) {
        // 用户已登录
        if (to.path == '/login') {
            // 用户已登录 访问 login 页面 跳转到首页
            next('/');
        } else {
            // 用户已登录 访问其他页面
            if (username) {
                next();
            } else {
                // 用户已登录 访问其他页面 需要获取用户信息
                try {
                    await userStore.getUserInfo();
                    next();
                } catch (error) {
                    await userStore.UserLogout();
                    next('/login');
                }
            }
        }
    } else {
        // 用户未登录
        if (to.path == '/login') {
            // 用户未登录 访问 login 页面
            next();
        } else {
            // 用户未登录 访问其他页面 跳转到登录页面
            next({
                path: '/login',
            });
        }
    }
});

// 路由后置守卫
router.afterEach((to, from) => {
    nprogress.done();
});

// TODO 路由鉴权
// 1: 用户未登录 只能访问 login 其他页面不可以访问
// 2: 用户已登录 不能访问 login 页面 其他页面可以访问
